#include <stdio.h>
#include <stdlib.h>

/**
％d			//整型输出
％ld		//长整型输出
％o			//以八进制数形式输出整数
％x		   //以十六进制数形式输出整数，或输出字符串的地址
％u			//以十进制数输出unsigned型数据(无符号数)

注意：		%d与%u的区别是，有无符号的数值范围不同，也就是极限的值不同，不然数值打印出来会有误
％c			//用来输出一个字符
％s			//用来输出一个字符串
％f			//用来输出实数，以小数形式输出，默认情况下保留小数点6位
%.5f		//用来输出实数，保留小数点5位
％e			//以指数形式输出实数
％g			//根据大小自动选f格式或e格式，且不输出无意义的零

 */
int main() {
    // 设置控制台代码页为 65001 (UTF-8)，防止乱码
    system("chcp 65001 > nul");
    //一.整数的格式化取值
    printf("整数的格式化取值\n");
    int a = 123, b = 123456;
    printf("%5d\n", a);		// 默认右对齐，且最少取5位整数，多余5位全取，不足5位使用空格左面补全
    printf("%05d\n", a);	// 使用0代替空格，在左边补齐位数
    printf("%-5d\n", a);	// 左对齐，不足位数，使用空格补全
    printf("%-05d\n", a);	// 左对齐，不足位数，还是用空格补全
    printf("%5d\n", b);		// 超过5位全取

    printf("\n小数的格式化取值\n");
    //二.小数的格式化取值
    double a2 = 123.326, b2 = 90.12;
    printf("%.2f\n", a2); // 取2位小数，且第三位四色五入
    printf("%.3f\n", b2); // 取3位小数，且不足的用0补全

    printf("%4.2f\n", b2); // 取至少4位字符，2位从b的左边开始取2位，剩余2位<整数2位+小数点1位,所以3位全部输出
    printf("%7.2f\n", b2); // 取至少7位字符， 2位小数，剩余5位>整数2位 + 小数点1位， 多出来的2位用空格补全

    //三.字符的格式化取值

    printf("\n字符的格式化取值\n");
    char str[30];
    // printf 函数在处理字符串时依赖于空字符 \0 来确定字符串的结束位置
    char s1[6] = { 'a', 'b', 'c', 'x', 'z', '\0' };  // 添加空字符 \0
    printf("1、%s==\n", s1);				// 打印完整的字符数组（字符串）
    printf("2、%2s==\n", s1);				// 打印至少2个字符
    printf("3、%5s==\n", s1);				// 打印至少5个字符，不足的用空格在左边补齐
    printf("4、%-5s==\n", s1);				// 打印至少5个字符，不足的用空格在右边补齐

    printf("5、%4.2s==\n", s1);			    // 总共输出4个字符，但是有2个需要在s1里面从左取，剩余的字符用空格默认在左边补全
    printf("6、%.2s==\n", s1);				// 总共输出2个字符，这2个字符从s1里面的左边开始取

    printf("\nsprintf格式化取值\n");
    // 该函数包含在stdio.h的头文件中
    // sprintf和平时我们常用的printf函数的功能很相似。sprintf函数打印到字符串中（要注意字符串的长度要足够容纳打印的内容，否则会出现内存溢出);
    // printf函数打印输出到屏幕上, sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛
    char str3[30];
    double a3 = 123.123456, b3 = 90.12;

    sprintf(str3, "获取的小数为：%.2f\n", a3); // 此处，只是把双引号中的字符串赋值给str数组，并没打印到屏幕
    printf("%s\n", str3);
    sprintf(str3, "%.2f-- 把2个小数拼接到一个字符串中--%6.2f\n", a3, b3);	// 把2个小数拼接到一个字符串中
    printf("%s\n", str3);
    return 0;
}